iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Python

pythonGUI學習筆記系列 第 18

Day18: PySide6 計時器(QTimer)

  • 分享至 

  • xImage
  •  

QTimer

QTimer : 計時器,可以設置特定的時間,並在每個時間間隔到達時執行某些任務。例如,一些廣告網站會使用類似的機制,每隔幾秒自動更換展示的圖片。

QTimer 信號

  • timeout.connect(function) : 當設定的時間到達後,會觸發該信號。

QTimer 設定開始和停止

  • start(msec) : 啟動計時器,並設定時間間隔,以毫秒為單位。如果設置為一秒,計時器將每隔一秒自動觸發一次。下面範例是每過一秒,會觸發信號,會列印出 「經過了一秒」。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget
from PySide6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        time = QTimer(self)
        time.start(1000)
        time.timeout.connect(lambda: print("經過了一秒"))

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()
  • stop() : 暫停計時器,當計時器停止後,timeout() 信號將不再觸發。。下面範例是當按下按鈕後,會停止列印文字。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget , QPushButton
from PySide6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 設定計時器
        time = QTimer(self)
        time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
        time.start(1000)

        #設定按鈕
        btn = QPushButton("按鈕",self)
        btn.clicked.connect(lambda: time.stop())         #當觸發信號時,會停止計時器

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()

設定 QTimer 只跑一次

  • setSingleShot(bool) : 設定計時器是否是單次觸發。下面範例是經過一秒後,就不會列印了。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget , QPushButton
from PySide6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 設定計時器
        time = QTimer(self)
        time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
        time.start(1000)

        # 設定只跑一次
        time.setSingleShot(True)

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()
  • singleShot(msec,function) : 設定計時器在指定的毫秒後執行槽函數,只執行一次,不會重複觸發。下面範例是透過 singleShot(msec,function) 一秒過後,列印文字,之後就不會有任何功能。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget
from PySide6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 設定計時器
        time = QTimer(self)

        # 設定只跑一次
        time.singleShot(1000, lambda: print("經過了一秒"))

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()

QTimer 常用的功能

  • setInterval(msce) : 設定觸發計時器的間隔時間,假如我設了五秒鐘,他就會每隔五秒後,開始執行計時器。下面範例是間隔一秒後,會列印文字,因為 start()是設置空的。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget
from PySide6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 設定計時器
        time = QTimer(self)
        time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
        time.start()

        # 設定間隔
        time.setInterval(1000)

if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()
  • isActive() : 會回傳計時器是否正在運行。下面範例通過 QLabel 確定是否有在運行計時器。
from PySide6.QtWidgets import QMainWindow , QApplication, QWidget , QLabel , QPushButton
from PySide6.QtCore import QTimer

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(100,100)
        # 設定計時器
        self.time = QTimer(self)
        self.time.timeout.connect(lambda: print("經過了一秒")) #每過一秒會列印文字
        self.time.start(1000)

        # 設定標籤
        self.label = QLabel("計時器狀態",self)
        self.label.setText(f'計時器狀態 : {self.time.isActive()}')

        #設定按鈕
        btn = QPushButton("按鈕",self)
        btn.setGeometry(0,20,50,50)
        btn.clicked.connect(self.stop)         #當觸發信號時,會停止計時器

    def stop(self):
        self.time.stop()
        self.label.setText(f'計時器狀態 : {self.time.isActive()}')


if __name__ == "__main__":
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec()

總結

  • QTimer 信號
功能 方法
時間到觸發信號 timeout.connect(function)
  • QTimer 開始和停止
功能 方法
開始 start(msec)
停止 stop()
  • QTimer 設定跑一次
功能 方法
設定是否單次觸發計時器 setSingleShot(bool)
設定毫秒後,觸發一次槽函數 singleShot(msec,function)
  • QTimer 常用的功能
功能 方法
計時器啟動間隔時間 setInterval(msec)
計時器是否運行 isActive()

上一篇
Day17: PySide6 對話框(QMessageBox)
下一篇
Day 19: PySide6 自訂信號
系列文
pythonGUI學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言